algebraic problem solving